package edu.pw.treegrid.server.query;

import edu.pw.treegrid.server.reportmodel.ReportColumn;
import java.util.Set;

/** 
 * @author Piotrek
 */
public abstract class Node {
	
	protected TableNode parent;

	public TableNode getParent() {
		return parent;
	}
	
	public void setParent(TableNode parent) {
		this.parent = parent;
	}
	
	private ReportColumn reportColumn;
	
	public ReportColumn getReportColumn() {
		return reportColumn;
	}

	public void setReportColumn(ReportColumn reportColumn) {
		this.reportColumn = reportColumn;
	}

	/** 
	 * @param query
	 */
	public abstract void generateQuery(Query query);

	/** 
	 * <!-- begin-UML-doc -->
	 * <p>
	 *     Zwraca true, jesli&nbsp;kolumna w lisciu jest tego samego typu co przekazana kolumna, po ktorej jest dokonywane
	 *     grupowanie zapytania.
	 * </p>
	 * <p>
	 *     Wykorzystywane jest to przy generacji zapytania, aby wskazac, ktore kolumny&nbsp;moga byc podane w klauzuli
	 *     SELECT.&nbsp;
	 * </p>
	 * <!-- end-UML-doc -->
	 * @param column
	 * @return
	 */
	public abstract boolean matchesGroupColumn(ReportColumn column);

	public abstract Set<ColumnNode> getLeafs();

	public abstract boolean matches(Node node);
}